import Vue from 'vue';
import App from './App';
import '@/utils/enhenceUni';
import uView from '@/uni_modules/uview-ui';
import share from '@/utils/share.js';
import WebsocketHeartbeat from '@/utils/WebsocketHeartbeat.js';
import globalMenus from '@/components/global-menus/global-menus.vue';

Vue.use(uView);
uni.$u.config.unit = 'rpx';
Vue.mixin(share);

Vue.config.errorHandler = function (err, vm, info) {
  // err 就是错误信息
  // vm相当于this实例
  // `info` 是 Vue 特定的错误信息，比如错误所在的生命周期钩子
  // 只在 2.2.0+ 可用
  if (window) {
    window.onerror = e => {
      console.log('-------------999999999-----------', e);
    };
  }
  console.log(err, vm, info, '-------err, vm, 000sinfo------');
};

Vue.config.productionTip = false;

// console.Olog = console.log;
// console.log = () => {};

App.mpType = 'app';
Vue.prototype.bus = new Vue();

Vue.component('globalMenus', globalMenus);

Vue.prototype.seqids = null;
Vue.prototype.task = null;
Vue.prototype.initHeaderWebSocket = () => {
  if (Vue.prototype.task) {
    // close websocket
    Vue.prototype.task.close({
      success() {
        console.log('------websocket close ok------');
      },
    });
  }

  // setTimeout(() => {
  //   console.log('--000--');
  //   Vue.prototype.bus.$emit('updateBodyReportData');
  //   setTimeout(() => {
  //     Vue.prototype.bus.$emit('updateBodyReportData');
  //   }, 6000);
  // }, 5000);
  Vue.prototype.seqids = null;
  WebsocketHeartbeat({
    miniprogram: wx,
    connectSocketParams: {
      url: process.env.VUE_APP_WSS_API + '/ws/register?platform=applet',
      protocols: [uni.getStorageSync('token')],
    },
    pingTimeout: 5000,
    pongTimeout: 25000,
    reconnectTimeout: 3, //多少秒一次重新链接
    pingMsg: JSON.stringify({ type: 'heartbeat' }),
  })
    .then(task => {
      Vue.prototype.task = task;

      task.onOpen = () => {
        //钩子函数
        // console.log('--------------open');
      };
      task.onClose = () => {
        //钩子函数
        // console.log('--------------close');
      };
      task.onError = e => {
        //钩子函数
        // console.log('---------------onError：', e);
      };
      task.onMessage = msg => {
        //钩子函数
        console.log('---------------onMessage', JSON.parse(msg.data));
        //业务处理
        // ......
        const resultData = JSON.parse(msg.data);
        // console.log('--------', msg);
        let eventType = resultData.type;
        const resultContent = resultData.content || {};
        const seq_id = +resultContent.seq_id || 0;
        const event = resultContent.event || '';
        if (eventType == 'msg') {
          // 小程序首页数据变化通知
          if (Vue.prototype.seqids == null || Vue.prototype.seqids < seq_id) {
            // 本地没有触发过
            Vue.prototype.seqids = seq_id; // 本地记录一下触发过的事件
            if (event == 'applet:index:data:change') {
              Vue.prototype.bus.$emit('updateHomeData');
            }
          }
          // 体测报告数据变化通知
          if (event == 'applet:bmd:detail:append') {
            console.log('applet:bmd:detail:append socket 监听到了');
            Vue.prototype.bus.$emit('updateBodyReportData');
          }
        }
      };
      task.onReconnect = () => {
        //钩子函数
        // console.log('-----------------reconnect...');
      };
      task.socketTask.onOpen(data => {
        //原生实例注册函数，重连后丢失
        // console.log('---------------socketTask open');
      });
      task.socketTask.onMessage(data => {
        //原生实例注册函数，重连后丢失
        // console.log('----------------socketTask data', data);
      });
    })
    .catch(err => {});
};

const app = new Vue({
  ...App,
});
app.$mount();
